Gradleの機能を使って、GithubをMavenRepo化
概要
Gradleで管理しているプロジェクトを、Github上にupして、
MavenRepoとして使用できるようにする。
以降は、MavenCentralに代わって、自分たちのGithubを依存性解決に使えるようになる。
(private useのための認証などは書いてません。すまん、眠い。)
おおざっぱな手順
1.build.gradleに追記、MavenRepoとしての設定を書きこんで、MavenRepo用にビルド。
2.ビルドしたものをGithubにpush。
3.使用するプロジェクトを一つ作る。
4.2でupしたMavenRepoに依存する感じに設定してウマー
こちらが出来上がったものになります
既存のいい感じのが無いので新規で用意。実際に作ったものを下記にupしておいた。
MavenRepoになる側
SampleMavenRepoByGradle
https://github.com/sassembla/SampleMavenRepoByGradle
Github上のMavenRepoを使う側
SampleGithubRepoUseProjectByGradle
https://github.com/sassembla/SampleGithubRepoUseProjectByGradle
1.build.gradleに追記、MavenRepoとしての設定を書きこんで、MavenRepo用にビルド
通常のJavaプロジェクトをビルドする以外に、下記の部分がMavenRepoを作る上でポイントになる。
//MavenRepository identity setting リポジトリの設定。これらは当然、読み込み時に使用する
group = 'com.kissaki.sample' //グループ
archivesBaseName = 'Samplemavenrepobygradle' //アーカイブベース
version = '0.0.1' //バージョン
uploadArchives {//アーカイブに際して、Maven形式で、どこに出力するかを指定する箇所
repositories {
mavenDeployer {
repository(url: "file:${projectDir}")
}
}
}
//まんまコピペさせてもらった、pomのライセンス情報とかを設定する箇所
[install.repositories.mavenInstaller, uploadArchives.repositories.mavenDeployer]*.pom*.whenConfigured { pom ->
pom.project {
inceptionYear '2012'
packaging 'jar'
licenses {
license {
name 'The Apache Software License, Version 2.0'
url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
distribution 'repo'
}
}
}
}
この状態で、src下に下記ファイルがあるとする。
src/com/kissaki/sample/
SampleMavenRepoByGradle.java
内容は
package com.kissaki.sample;
public class SampleMavenRepoByGradle {
public void something() {
System.out.println("Something!!");
}
}
この状態で、
gradle uploadArchives
ってやると、
com/フォルダ以下がちょこちょこ作られる。(凄く横に長い画像)
中身にはjarとかpomとかが出来てる。pom、、、なんて汚らわしい。
2.ビルドしたものをGithubにpush
まんま、Githubにpush。
comなんちゃらも、ちゃんとaddして含もう。
3.使用するプロジェクトを一つ作る
SampleGithubRepoUseProjectByGradle を作成。
Javaのプロジェクトで、せっかくなのでmain関数の中で
SampleMavenRepoByGradle.java の内容を使う。
src/com/kissaki フォルダ以下に下記を用意。
SampleGithubRepoUseProjectByGradle.java
package com.kissaki;
import com.kissaki.sample.*;
public class SampleGithubRepoUseProjectByGradle {
/**
* @param args
*/
public static void main(String[] args) {
SampleMavenRepoByGradle m = new SampleMavenRepoByGradle();
m.something();
}
}
この状態で gradle compileJava とかやっても、SampleMavenRepoByGradleクラスの依存性解決ができず
エラーになること必須。
4. 2でupしたMavenRepoに依存する感じに設定してウマー
githubへの依存は、こんな感じに書けば良い。
repositories {
mavenRepo urls: 'https://github.com/sassembla/SampleMavenRepoByGradle/raw/master/'
}
dependencies {
compile 'com.kissaki.sample:Samplemavenrepobygradle:0.0.1'
}
repoについては、Web上のgithubリポジトリのアドレスに、raw/master をつけてあげる事でOK。
compile時に依存するので、依存内容であるMavenRepoのidentityを書く。
で、実際に、 gradle compileJava でビルドしてみると
あら、一発でうまく行った。(写真はTextMateのGradle bundle を使っています)
せっかくなので、jarで動かせるように、下記をbuild.gradleに書き加える。
jar {
manifest {
attributes 'Main-class': 'com.kissaki.SampleGithubRepoUseProjectByGradle'
}
from {
configurations.runtime.collect {
if (it.isDirectory()){
it
} else {
zipTree(it)
}
}
}
}
からの、
gradle jar
できたー。
実行してみよう。
java -jar /Users/sassembla/Desktop/SampleGithubRepoUseProjectByGradle/build/libs/SampleGithubRepoUseProjectByGradle.jar
パーフェクトだウォルター。
参考
krmdから、この辺を参考にしたって聞いて自分も参考にしました。
http://wadahiro.hatenablog.com/entry/2012/07/24/234727
http://downright-amazed.blogspot.jp/2011/09/hosting-maven-repository-on-github-for.html